Add GTK_DEBUG=baselines support
authorAlexander Larsson <alexl@redhat.com>
Thu, 21 Mar 2013 17:25:29 +0000 (18:25 +0100)
committerAlexander Larsson <alexl@redhat.com>
Tue, 23 Apr 2013 03:50:37 +0000 (05:50 +0200)
This draws red lines to show where the baselines are

gtk/gtkdebug.h
gtk/gtkmain.c
gtk/gtkwidget.c

index ecc9a70d75193be266f89da1f671d4e013d96e22..f9e01e5c18682d9ffb9e319e7fa7f228e455af69 100644 (file)
@@ -47,7 +47,8 @@ typedef enum {
   GTK_DEBUG_PRINTING        = 1 << 10,
   GTK_DEBUG_BUILDER         = 1 << 11,
   GTK_DEBUG_SIZE_REQUEST    = 1 << 12,
-  GTK_DEBUG_NO_CSS_CACHE    = 1 << 13
+  GTK_DEBUG_NO_CSS_CACHE    = 1 << 13,
+  GTK_DEBUG_BASELINES       = 1 << 14
 } GtkDebugFlag;
 
 #ifdef G_ENABLE_DEBUG
index 36a560458493a695b26b5167115e49104307d806..eeef8edcf1ed766e23048a5e619ec41f1d04b9b1 100644 (file)
@@ -171,7 +171,8 @@ static const GDebugKey gtk_debug_keys[] = {
   {"printing", GTK_DEBUG_PRINTING},
   {"builder", GTK_DEBUG_BUILDER},
   {"size-request", GTK_DEBUG_SIZE_REQUEST},
-  {"no-css-cache", GTK_DEBUG_NO_CSS_CACHE}
+  {"no-css-cache", GTK_DEBUG_NO_CSS_CACHE},
+  {"baselines", GTK_DEBUG_BASELINES}
 };
 #endif /* G_ENABLE_DEBUG */
 
index bbfdefad4bf4249299b4bf717ac4a2c323b5ef94..30c3cc55e5dc88b3c59d5e4ed59e5910cc0d0114 100644 (file)
@@ -6383,6 +6383,26 @@ _gtk_widget_draw_internal (GtkWidget *widget,
                      0, cr,
                      &result);
 
+#ifdef G_ENABLE_DEBUG
+      if (G_UNLIKELY (gtk_get_debug_flags () & GTK_DEBUG_BASELINES))
+       {
+         gint baseline = gtk_widget_get_allocated_baseline (widget);
+         gint width = gtk_widget_get_allocated_width (widget);
+
+         if (baseline != -1)
+           {
+             cairo_save (cr);
+             cairo_new_path (cr);
+             cairo_move_to (cr, 0, baseline+0.5);
+             cairo_line_to (cr, width, baseline+0.5);
+             cairo_set_line_width (cr, 1.0);
+             cairo_set_source_rgba (cr, 1.0, 0, 0, 0.25);
+             cairo_stroke (cr);
+             cairo_restore (cr);
+           }
+       }
+#endif
+
       if (cairo_status (cr) &&
           _gtk_cairo_get_event (cr))
         {